/*
 * PainelCompromissos.java
 *
 * Created on 4 de Novembro de 2009, 12:17
 */

package agendaBD;

import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author  07273519
 */
public class PainelCompromissos extends javax.swing.JPanel {
    
    private boolean editando = false;
    private boolean criando = false;

    /** Creates new form PainelCompromissos */
    public PainelCompromissos()
    {
        initComponents();
        cmbPrioridade.setVisible(false);
        cmbLocal.setVisible(false);
        //inicializa lista lateral de contatos
        listaCompromissos();
        cmbLocal.setSelectedIndex(-1);
        cmbPrioridade.setSelectedIndex(-1);
    }

    private void listaCompromissos ()
    {
        ResultSet resultado;
        try
        {
           resultado = Conexao.getInstance().consultar("select data from compromissos order by data");

            String [] todosCompromissos;

            int i;

            if(resultado.last())
            {
                todosCompromissos = new String[resultado.getRow()];

                resultado.beforeFirst();
                
                for(i=0; resultado.next(); i++)
                {
                    todosCompromissos[i] = resultado.getDate(1).toString();
                }
            }
            
            else
                todosCompromissos = new String[0];

            lstCompromissos.setListData(todosCompromissos);
        }
        catch (Exception ex) {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        pnlController = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        lstCompromissos = new javax.swing.JList();
        btnNovoContato = new javax.swing.JButton();
        pnlContent = new javax.swing.JPanel();
        btnEditar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        cmbLocal = new javax.swing.JComboBox();
        lblLocal = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        txtDescricao = new javax.swing.JTextArea();
        txtNome = new javax.swing.JTextField();
        lblNome = new javax.swing.JLabel();
        txtData = new javax.swing.JFormattedTextField();
        lblData = new javax.swing.JLabel();
        lblHorario = new javax.swing.JLabel();
        txtHorario = new javax.swing.JFormattedTextField();
        cmbPrioridade = new javax.swing.JComboBox();
        lblPrioridade = new javax.swing.JLabel();
        lblDescricao = new javax.swing.JLabel();
        txtPrioridade = new javax.swing.JTextField();
        txtLocal = new javax.swing.JTextField();
        pnlHead = new javax.swing.JPanel();
        lblCompromissos = new javax.swing.JLabel();
        lblDescCabecalho = new javax.swing.JLabel();
        icoCompromisso = new javax.swing.JLabel();

        pnlController.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 5, 1, 5));
        pnlController.setPreferredSize(new java.awt.Dimension(150, 100));

        lstCompromissos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lstCompromissosMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(lstCompromissos);

        btnNovoContato.setText("Novo Compromisso");
        btnNovoContato.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoContatoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlControllerLayout = new javax.swing.GroupLayout(pnlController);
        pnlController.setLayout(pnlControllerLayout);
        pnlControllerLayout.setHorizontalGroup(
            pnlControllerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE)
            .addComponent(btnNovoContato, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE)
        );
        pnlControllerLayout.setVerticalGroup(
            pnlControllerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlControllerLayout.createSequentialGroup()
                .addGap(5, 5, 5)
                .addComponent(btnNovoContato)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 475, Short.MAX_VALUE)
                .addGap(23, 23, 23))
        );

        btnEditar.setText("Editar");
        btnEditar.setEnabled(false);
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        btnExcluir.setText("Excluir");
        btnExcluir.setEnabled(false);
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        cmbLocal.setEnabled(true);
        cmbLocal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbLocalActionPerformed(evt);
            }
        });

        lblLocal.setText("Local");

        txtDescricao.setColumns(20);
        txtDescricao.setEditable(false);
        txtDescricao.setRows(5);
        jScrollPane2.setViewportView(txtDescricao);

        txtNome.setEditable(false);

        lblNome.setText("Nome (dê um título para o seu compromisso!)");

        txtData.setEditable(false);
        try {
            txtData.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("####-##-##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }

        lblData.setText("Data (aaaa-mm-dd)");

        lblHorario.setText("Horário (hh:mm)");

        txtHorario.setEditable(false);
        try {
            txtHorario.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##:##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }

        cmbPrioridade.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Baixa", "Média", "Alta", "Máxima" }));
        cmbPrioridade.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbPrioridadeActionPerformed(evt);
            }
        });

        lblPrioridade.setText("Prioridade");

        lblDescricao.setText("Descrição");

        txtPrioridade.setEditable(false);

        txtLocal.setEditable(false);

        javax.swing.GroupLayout pnlContentLayout = new javax.swing.GroupLayout(pnlContent);
        pnlContent.setLayout(pnlContentLayout);
        pnlContentLayout.setHorizontalGroup(
            pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlContentLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlContentLayout.createSequentialGroup()
                        .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblData)
                            .addComponent(txtData, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblHorario)
                            .addComponent(txtHorario, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(pnlContentLayout.createSequentialGroup()
                        .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(pnlContentLayout.createSequentialGroup()
                                .addComponent(lblNome)
                                .addGap(268, 268, 268))
                            .addGroup(pnlContentLayout.createSequentialGroup()
                                .addComponent(txtNome, javax.swing.GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE)
                                .addGap(178, 178, 178))
                            .addGroup(pnlContentLayout.createSequentialGroup()
                                .addComponent(lblLocal)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtLocal, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(cmbLocal, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 484, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlContentLayout.createSequentialGroup()
                                .addComponent(btnEditar)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btnExcluir)))
                        .addGap(118, 118, 118))
                    .addGroup(pnlContentLayout.createSequentialGroup()
                        .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(cmbPrioridade, 0, 255, Short.MAX_VALUE)
                            .addGroup(pnlContentLayout.createSequentialGroup()
                                .addComponent(lblPrioridade)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtPrioridade, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(347, 347, 347))
                    .addGroup(pnlContentLayout.createSequentialGroup()
                        .addComponent(lblDescricao)
                        .addContainerGap(483, Short.MAX_VALUE))))
        );
        pnlContentLayout.setVerticalGroup(
            pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlContentLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblHorario)
                    .addGroup(pnlContentLayout.createSequentialGroup()
                        .addGap(1, 1, 1)
                        .addComponent(lblData)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtData, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtHorario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addGap(18, 18, 18)
                .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lblPrioridade)
                        .addComponent(txtPrioridade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(pnlContentLayout.createSequentialGroup()
                        .addGap(21, 21, 21)
                        .addComponent(cmbPrioridade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(18, 18, 18)
                .addComponent(lblNome)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(lblDescricao)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblLocal)
                    .addComponent(txtLocal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cmbLocal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(59, 59, 59)
                .addGroup(pnlContentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEditar)
                    .addComponent(btnExcluir))
                .addContainerGap())
        );

        pnlHead.setBackground(new java.awt.Color(255, 255, 255));
        pnlHead.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 20, 1, 20));
        pnlHead.setPreferredSize(new java.awt.Dimension(100, 50));
        pnlHead.setLayout(new java.awt.GridBagLayout());

        lblCompromissos.setText("COMPROMISSOS");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.weightx = 0.8;
        pnlHead.add(lblCompromissos, gridBagConstraints);

        lblDescCabecalho.setFont(new java.awt.Font("Monospaced", 0, 10));
        lblDescCabecalho.setText("Listar, adicionar, editar e excluir compromissos.");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.ipadx = 20;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0);
        pnlHead.add(lblDescCabecalho, gridBagConstraints);

        icoCompromisso.setIcon(new javax.swing.ImageIcon(getClass().getResource("/agendaBD/imagens/luigi3.png"))); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        pnlHead.add(icoCompromisso, gridBagConstraints);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(pnlHead, javax.swing.GroupLayout.DEFAULT_SIZE, 714, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addComponent(pnlController, javax.swing.GroupLayout.DEFAULT_SIZE, 142, Short.MAX_VALUE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(pnlContent, javax.swing.GroupLayout.PREFERRED_SIZE, 539, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(27, 27, 27)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(pnlHead, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(539, Short.MAX_VALUE))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(50, 50, 50)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(pnlController, javax.swing.GroupLayout.DEFAULT_SIZE, 539, Short.MAX_VALUE)
                        .addComponent(pnlContent, javax.swing.GroupLayout.DEFAULT_SIZE, 539, Short.MAX_VALUE))))
        );
    }// </editor-fold>//GEN-END:initComponents

private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
    if(!editando && !criando)
        vouEditar();
    else
    {
        if(editando)
            salvarEdicao();
        else
            salvarCriacao();
    }
}//GEN-LAST:event_btnEditarActionPerformed


    @SuppressWarnings("static-access")
private void salvarCriacao()
{
        boolean valido = true;

        try
        {
            if(txtData.getText().contains(" "))
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo DATA está vazio.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(txtHorario.getText().contains(" "))
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo HORÁRIO está vazio.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(txtPrioridade.getText().isEmpty())
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo PRIORIDADE está vazio.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(Integer.parseInt(txtData.getText(0,4)) == 0 || Integer.parseInt(txtData.getText(5,2)) > 12 || Integer.parseInt(txtData.getText(8,2)) > 31)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(Integer.parseInt(txtHorario.getText(0,2)) > 23 || Integer.parseInt(txtHorario.getText().substring(3)) > 59)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor de HORÁRIO inválido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else
            {
                if(Integer.parseInt(txtData.getText(8,2)) > 30 && (Integer.parseInt(txtData.getText(5,2)) == 4 || Integer.parseInt(txtData.getText(5,2)) == 6 || Integer.parseInt(txtData.getText(5,2)) == 9 || Integer.parseInt(txtData.getText(5,2)) == 11))
                {
                    if(Integer.parseInt(txtData.getText(8,2)) > 30)
                    {
                        valido = false;
                        JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                    }
                }

                else if(Integer.parseInt(txtData.getText(5,2)) == 2)
                {
                    if(Integer.parseInt(txtData.getText(8,2)) > 28)
                    {
                        if(Integer.parseInt(txtData.getText(0,4))%4 != 0)
                        {
                            valido = false;
                            JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                        }

                        else if(Integer.parseInt(txtData.getText(8,2)) > 29)
                        {
                            valido = false;
                            JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }

                else if(txtNome.getText().length()>10)
                {
                    valido = false;
                    JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo NOME muito longo, deve ter no máximo 10 caracteres.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                }

                else if(txtDescricao.getText().length()>30)
                {
                    valido = false;
                    JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo DESCRIÇÃO muito longo, deve ter no máximo 30 caracteres.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                }

                if(valido)
                {
                    criando = false;
                
                    //insere os dados no BD
                    Conexao.getInstance().consultar
                            ("insert into compromissos "+
                            "(comprom_id," +
                            "horário," +
                            "descrição," +
                            "nome," +
                            "data," +
                            "prioridade," +
                            "local_nome) " +
                            "values " +
                            "(seq_pk_compromissos.nextval, '"+
                            txtHorario.getText()+"', '"+
                            txtDescricao.getText()+"', '"+
                            txtNome.getText()+"', to_date('"+
                            txtData.getText()+"', 'yyyy-mm-dd'), '"+
                            txtPrioridade.getText()+"', '"+
                            txtLocal.getText()+"')");

                     Conexao.getInstance().consultar("commit");

                    cmbPrioridade.setVisible(false);
                    cmbLocal.setVisible(false);
                    txtData.setEditable(false);
                    txtHorario.setEditable(false);
                    txtNome.setEditable(false);
                    txtDescricao.setEditable(false);
                    btnEditar.setText("Editar");
                    btnExcluir.setText("Excluir");
                    btnEditar.setEnabled(false);
                    btnExcluir.setEnabled(false);
                    cmbLocal.setSelectedIndex(-1);
                    cmbPrioridade.setSelectedIndex(-1);

                    limpaCampos();

                    listaCompromissos();
                }
            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }
}

private void salvarEdicao()
{
    boolean valido = true;

        try
        {  if(txtData.getText().contains(" "))
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo DATA está vazio.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(txtHorario.getText().contains(" "))
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo HORÁRIO está vazio.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(txtPrioridade.getText().isEmpty())
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo PRIORIDADE está vazio.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(Integer.parseInt(txtData.getText(0,4)) == 0 || Integer.parseInt(txtData.getText(5,2)) > 12 || Integer.parseInt(txtData.getText(8,2)) > 31)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else if(Integer.parseInt(txtHorario.getText(0,2)) > 23 || Integer.parseInt(txtHorario.getText().substring(3)) > 59)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor de HORÁRIO inválido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            else
            {
                if(Integer.parseInt(txtData.getText(8,2)) > 30 && (Integer.parseInt(txtData.getText(5,2)) == 4 || Integer.parseInt(txtData.getText(5,2)) == 6 || Integer.parseInt(txtData.getText(5,2)) == 9 || Integer.parseInt(txtData.getText(5,2)) == 11))
                {
                    if(Integer.parseInt(txtData.getText(8,2)) > 30)
                    {
                        valido = false;
                        JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                    }
                }

                else if(Integer.parseInt(txtData.getText(5,2)) == 2)
                {
                    if(Integer.parseInt(txtData.getText(8,2)) > 28)
                    {
                        if(Integer.parseInt(txtData.getText(0,4))%4 != 0)
                        {
                            valido = false;
                            JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                        }

                        else if(Integer.parseInt(txtData.getText(8,2)) > 29)
                        {
                            valido = false;
                            JOptionPane.showMessageDialog(null,"Não foi possível editar. Valor para DATA invalido.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }

                else if(txtNome.getText().length()>10)
                {
                    valido = false;
                    JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo NOME muito longo, deve ter no máximo 10 caracteres.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                }

                else if(txtDescricao.getText().length()>30)
                {
                    valido = false;
                    JOptionPane.showMessageDialog(null,"Não foi possível editar. Campo DESCRIÇÃO muito longo, deve ter no máximo 30 caracteres.","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                }

                if(valido)
                {
                   editando = false;

                   ResultSet resultado2 = Conexao.getInstance().consultar("select comprom_id from compromissos order by data");

                   if(resultado2.last())
                   {
                       resultado2.beforeFirst();

                       for(int i = 0; i<(lstCompromissos.getSelectedIndex()+1); i++)
                       {
                            resultado2.next();
                       }

                   int comprom_id_selected = resultado2.getInt(1);

                    //atualiza os dados no BD
                    Conexao.getInstance().consultar
                            ("update compromissos "+
                            "set horário='" + txtHorario.getText()+"',"+
                            "descrição='" + txtDescricao.getText()+"',"+
                            "nome='" + txtNome.getText()+"',"+
                            "data=to_date('"+
                            txtData.getText()+"', 'yyyy-mm-dd'),"+
                            "prioridade='" + txtPrioridade.getText()+"',"+
                            "local_nome='" + txtLocal.getText()+"'"+
                            " where comprom_id ="+comprom_id_selected);

                     Conexao.getInstance().consultar("commit");
                   }

                    cmbPrioridade.setVisible(false);
                    cmbLocal.setVisible(false);
                    txtData.setEditable(false);
                    txtHorario.setEditable(false);
                    txtNome.setEditable(false);
                    txtDescricao.setEditable(false);
                    btnEditar.setText("Editar");
                    btnExcluir.setText("Excluir");
                    btnEditar.setEnabled(false);
                    btnExcluir.setEnabled(false);
                    cmbLocal.setSelectedIndex(-1);
                    cmbPrioridade.setSelectedIndex(-1);

                    limpaCampos();

                    listaCompromissos();
                }
            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }
}


private void vouEditar()
{
    editando = true;

            try
        {
            ResultSet resultado = Conexao.getInstance().consultar("select nome from locais");

            int i=0;

            this.cmbLocal.removeAllItems();

            //insere nomes dos locais na listagem de locais
            if(resultado.last())
            {
                resultado.beforeFirst();

                for(; resultado.next(); i++)
                {
                    cmbLocal.insertItemAt(resultado.getString(1), i);
                }

            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }

        cmbPrioridade.setVisible(true);
        cmbLocal.setVisible(true);
        txtData.setEditable(true);
        txtHorario.setEditable(true);
        txtNome.setEditable(true);
        txtDescricao.setEditable(true);
        btnEditar.setText("OK");
        btnExcluir.setText("Cancelar");
}

private void limpaCampos()
{
    txtData.setText("");
    txtDescricao.setText("");
    txtHorario.setText("");
    txtLocal.setText("");
    txtNome.setText("");
    txtPrioridade.setText("");
}

private void restauraCampos()
{
    this.lstCompromissosMouseClicked(null);
}

private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed

    if(editando || criando) //cancelar
    {
        if(criando)
        {
            limpaCampos();
            btnEditar.setEnabled(false);
            btnExcluir.setEnabled(false);
        }
        
        else
            restauraCampos();

        editando = false;
        criando = false;

        cmbPrioridade.setVisible(false);
        cmbLocal.setVisible(false);
        txtData.setEditable(false);
        txtHorario.setEditable(false);
        txtNome.setEditable(false);
        txtDescricao.setEditable(false);
        btnEditar.setText("Editar");
        btnExcluir.setText("Excluir");

    }
    
    else //excluir
    {
        try
        {
            ResultSet resultado;

           resultado = Conexao.getInstance().consultar("select comprom_id from compromissos order by data");

           if(resultado.last())
           {
               resultado.beforeFirst();

               for(int i = 0; i<(lstCompromissos.getSelectedIndex()+1); i++)
               {
                    resultado.next();
               }

            // TODO add your handling code here:
            //excluir contato da tabela
            Conexao.getInstance().consultar("delete compromissos where comprom_id = "+resultado.getInt(1));
            Conexao.getInstance().consultar("commit");
            listaCompromissos();
            limpaCampos();
           }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}//GEN-LAST:event_btnExcluirActionPerformed

private void btnNovoContatoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoContatoActionPerformed
    // TODO add your handling code here:

    if(editando)
        editando = false;

    else
    {
        btnEditar.setText("OK");
        btnExcluir.setText("Cancelar");
        btnEditar.setEnabled(true);
        btnExcluir.setEnabled(true);
        criando = true;
        cmbPrioridade.setVisible(true);
        cmbLocal.setVisible(true);
        txtData.setEditable(true);
        txtHorario.setEditable(true);
        txtNome.setEditable(true);
        txtDescricao.setEditable(true);
    }
    
    limpaCampos();

       try
        {
            ResultSet resultado = Conexao.getInstance().consultar("select nome from locais");

            int i=0;
            this.cmbLocal.removeAllItems();

            //insere nomes dos locais na listagem de locais
            if(resultado.last())
            {
                resultado.beforeFirst();

                for(; resultado.next(); i++)
                {
                    cmbLocal.insertItemAt(resultado.getString(1), i);
                }

            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }
}//GEN-LAST:event_btnNovoContatoActionPerformed

private void cmbLocalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbLocalActionPerformed
    // TODO add your handling code here:

    //mudou local selecionado
    if(cmbLocal.getSelectedIndex()!=-1)
    {
        txtLocal.setText(cmbLocal.getSelectedItem().toString());
    }
}//GEN-LAST:event_cmbLocalActionPerformed

private void cmbPrioridadeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbPrioridadeActionPerformed
    // TODO add your handling code here:

    //selecionou outra prioridade
    if(this.cmbPrioridade.getSelectedIndex() != -1)
    {
        txtPrioridade.setText(cmbPrioridade.getSelectedItem().toString());
    }

}//GEN-LAST:event_cmbPrioridadeActionPerformed

private void lstCompromissosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstCompromissosMouseClicked
    // TODO add your handling code here:

    if(!lstCompromissos.isSelectionEmpty())
    {
           try
        {
            // TODO add your handling code here:

            editando = false;
            criando = false;

            cmbPrioridade.setVisible(false);
            cmbLocal.setVisible(false);
            txtData.setEditable(false);
            txtHorario.setEditable(false);
            txtNome.setEditable(false);
            txtDescricao.setEditable(false);
            btnEditar.setText("Editar");
            btnExcluir.setText("Excluir");
            btnEditar.setEnabled(true);
            btnExcluir.setEnabled(true);

            limpaCampos();

          ResultSet resultado;

           ResultSet resultado2 = Conexao.getInstance().consultar("select comprom_id from compromissos order by data");

           if(resultado2.last())
           {
               resultado2.beforeFirst();

               for(int i = 0; i<(lstCompromissos.getSelectedIndex()+1); i++)
               {
                    resultado2.next();
               }

               int comprom_id_selected = resultado2.getInt(1);

            //resultado = Conexao.getInstance().consultar("select nome from locais");

            //habilita os botoes de edição e carrega dados do item selecionado nos campos
                btnEditar.setEnabled(true);
                btnExcluir.setEnabled(true);

                txtData.setText(lstCompromissos.getSelectedValue().toString());
                resultado = Conexao.getInstance().consultar("select nome from compromissos where comprom_id = "+comprom_id_selected);

                if(resultado.last())
                {
                    resultado.beforeFirst();
                    resultado.next();
                    txtNome.setText(resultado.getString(1));
                }

                resultado = Conexao.getInstance().consultar("select descrição from compromissos where comprom_id = "+comprom_id_selected);

                if(resultado.last())
                {
                    resultado.beforeFirst();
                    resultado.next();
                    txtDescricao.setText(resultado.getString(1));
                }

                resultado = Conexao.getInstance().consultar("select horário from compromissos where comprom_id = "+comprom_id_selected);

                if(resultado.last())
                {
                    resultado.beforeFirst();
                    resultado.next();
                    txtHorario.setText(resultado.getString(1));
                }

                resultado = Conexao.getInstance().consultar("select local_nome from compromissos where comprom_id = "+comprom_id_selected);

                if(resultado.last())
                {
                    resultado.beforeFirst();
                    resultado.next();
                    txtLocal.setText(resultado.getString(1));
                }

                resultado = Conexao.getInstance().consultar("select prioridade from compromissos where comprom_id = "+comprom_id_selected);

                if(resultado.last())
                {
                    resultado.beforeFirst();
                    resultado.next();
                    txtPrioridade.setText(resultado.getString(1));
                }
           }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelCompromissos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}//GEN-LAST:event_lstCompromissosMouseClicked


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnNovoContato;
    private javax.swing.JComboBox cmbLocal;
    private javax.swing.JComboBox cmbPrioridade;
    private javax.swing.JLabel icoCompromisso;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblCompromissos;
    private javax.swing.JLabel lblData;
    private javax.swing.JLabel lblDescCabecalho;
    private javax.swing.JLabel lblDescricao;
    private javax.swing.JLabel lblHorario;
    private javax.swing.JLabel lblLocal;
    private javax.swing.JLabel lblNome;
    private javax.swing.JLabel lblPrioridade;
    private javax.swing.JList lstCompromissos;
    private javax.swing.JPanel pnlContent;
    private javax.swing.JPanel pnlController;
    private javax.swing.JPanel pnlHead;
    private javax.swing.JFormattedTextField txtData;
    private javax.swing.JTextArea txtDescricao;
    private javax.swing.JFormattedTextField txtHorario;
    private javax.swing.JTextField txtLocal;
    private javax.swing.JTextField txtNome;
    private javax.swing.JTextField txtPrioridade;
    // End of variables declaration//GEN-END:variables

}
